package online_handler

import (
	"fmt"
	"github.com/gin-gonic/gin/binding"
	"github.com/go-playground/validator"
	"peilian-api/app/global/bind"
	"peilian-api/app/global/log"
	"peilian-api/app/model"
	"peilian-api/app/services/agent_service"
	"peilian-api/app/services/manual_service"
	"peilian-api/app/services/online_service"
	"peilian-api/app/services/user_service"
	"peilian-api/utils/format"

	"github.com/gin-gonic/gin"
)

func OptionHandler(ctx *gin.Context) {
	// 绑定参数
	var op model.OptionParams
	if err := bind.ShouldBinding(ctx, &op); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err := online_service.OptionService(ctx, op)
	if err != nil {
		format.NewResponseJson(ctx).Err(30002, err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}

// 手动更新数据
func ManualOptData(ctx *gin.Context) {
	var osp model.OptionSchameParams
	if err := bind.ShouldBinding(ctx, &osp); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	out, err := manual_service.ManualOptData(ctx, osp)
	if err != nil {
		format.NewResponseJson(ctx).SuccessObj(struct {
			Info interface{} `json:"info"`
			Msg  string      `json:"msg"`
		}{
			Info: out,
			Msg:  err.Error(),
		})
		return
	}
	format.NewResponseJson(ctx).SuccessObj(struct {
		Info interface{} `json:"info"`
		Msg  string      `json:"msg"`
	}{
		Info: out,
		Msg:  "操作成功",
	})
}

// 手动更新用户的信息
func ManualOptUserData(ctx *gin.Context) {
	var osp model.SetUserInfoRedisParams
	if err := bind.ShouldBinding(ctx, &osp); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	out, _ := user_service.SetUserInfo(ctx, uint(osp.Uid))
	format.NewResponseJson(ctx).SuccessObj(out)
}

func ManualAddAgentHandler(ctx *gin.Context) {
	var osp model.AddAgentParams
	if err := bind.ShouldBinding(ctx, &osp); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err, out := agent_service.ManualAddAgent(ctx, osp)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(out)
}

func ManualAddSchoolTokenHandler(ctx *gin.Context) {
	var req model.AddTokenReq
	if err := bind.ShouldBinding(ctx, &req); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	out, err := manual_service.AddSchoolToken(ctx, req)
	if err != nil {
		format.NewResponseJson(ctx).Err(500, err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(out)
}

func ManualAddUsersHandler(ctx *gin.Context) {
	var osp model.AddUsersParams
	if err := binding.Form.Bind(ctx.Request, &osp); err != nil {
		fmt.Println(err)
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	if err := validator.New().Struct(osp); err != nil {
		log.Logger.ErrorF(ctx, fmt.Sprintf("参数校验error: %v", err.Error()))
		fmt.Println(err)
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err, out := agent_service.ManualAddUsers(ctx, osp)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).SuccessObj(out)
}

func ManualUpdateAgentHandler(ctx *gin.Context) {
	// 绑定参数 使用添加用户名信息
	var aur model.AgentUpdateReq
	if err := bind.ShouldBinding(ctx, &aur); err != nil {
		format.NewResponseJson(ctx).Err(30001, err.Error())
		return
	}
	err := agent_service.ManualUpdateAgent(ctx, aur)
	if err != nil {
		format.NewResponseJson(ctx).Err(err.Code, err.Err.Error())
		return
	}
	format.NewResponseJson(ctx).Success(make([]interface{}, 0))
}
